1. Technical Field
The present disclosure relates to software frameworks, and more particularly to a system and method for enabling software components implemented in different technologies running within one process.
2. Description of Related Art
A container is a runtime entity that provides services to specialized components, e.g. lifecycle management, dependency management and configuration. The container is an application that can host components and provides special services to this components.
Containers are technology specific, for example, written for Java, .NET, etc. For example, an OSGi (Java) container, specified by the OSGi Alliance (formerly known as the Open Services Gateway initiative), is a Java-based service platform that can be remotely managed. The OSGi specification is a framework that defines an application lifecycle model and a service registry. The OSGi container natively supports loading and hosting of Java components but has no support for other technologies.
In a Java Framework implementation, the Java SDK allows hosting C++ components (DLLs) in a Java Virtual Machine (JVM) process. A java function call loads this DLL via the Java Native Interface (JNI), the components of which can be activated and interact with each other. The Java Framework allows only C++ DLLs to be loaded.
Referring to the .NET Framework; The .NET Framework has a function call that loads a C++ component into the .NET virtual machine process. Via PInvoke the two components can interact with each other. The .Net Framework from Microsoft supports only the loading of C++ DLLs.
In each of these technologies, OSGi, Java, and .Net, loading and hosting of different technologies in a single process is not supported.
While communication between processes is possible, it introduces inefficiencies and additional resource overhead. For example, for components hosted in separate application processes, inter-process communication uses, for example, sockets, remote procedure calls (RPC), etc.
Therefore, a need exists for a system and method for enabling software components implemented in different technologies to be hosted in a container implemented as a single process.